/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package proyecto;

import java.sql.*;
import java.util.ArrayList;
import java.util.Iterator;

/**
 *
 * @author pablopunk
 */
public class ConexionBD {

    protected static Connection obtenerConexionBD() throws ClassNotFoundException, InstantiationException, IllegalAccessException {

        Connection con = null;
        java.util.Properties conProps;

        conProps = new java.util.Properties();
        conProps.put("user", "root");
        conProps.put("password", "root");

        try {
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/gtd", conProps);
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
        return con;
    }

    protected static String obtenerNombreUsuario(String id) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException {
        Connection con = obtenerConexionBD();
        Statement statement = con.createStatement();
        String query = "SELECT nombre FROM usuarios WHERE id='" + id + "';";
        ResultSet resultado = null;
        String nombre = "";
        try {
            resultado = statement.executeQuery(query);
        } catch (SQLException e) {
            System.out.println(e.getMessage());
            return null;
        }

        while (resultado.next()) {
            nombre = resultado.getString("nombre");
        }

        return nombre;
    }

    protected static ArrayList<Proyecto> obtenerProyectosUsuario(String id) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException {
        Connection con = obtenerConexionBD();
        Statement statement = con.createStatement();
        Statement statement2 = con.createStatement();
        String query = "SELECT * FROM proyectos_usuario WHERE usuario='" + id + "';";
        ResultSet resultado = null;
        ResultSet resultado2 = null;
        ArrayList<Proyecto> proyectos = new ArrayList<>();
        Proyecto proyectoActual = null;
        try {
            resultado = statement.executeQuery(query);
        } catch (SQLException e) {
            System.out.println(e.getMessage());
            return null;
        }

        while (resultado.next()) {
            try {
                resultado2 = statement2.executeQuery("SELECT * FROM proyectos WHERE id='" + resultado.getString("proyecto") + "';");
            } catch (SQLException e) {
                System.out.println(e.getMessage());
                return null;
            }
            while (resultado2.next()) {
                proyectoActual = new Proyecto();
                proyectoActual.setNombre(resultado2.getString("nombre"));
                proyectoActual.setFechaInicio(resultado2.getDate("fechaInicio"));
                proyectoActual.setFechaFin(resultado2.getDate("fechaFin"));
            }
            proyectos.add(proyectoActual);
            resultado2.close();
        }

        return proyectos;
    }

    protected static ArrayList<Tarea> obtenerTareasUsuarioBD(String id) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException {
        Connection con = obtenerConexionBD();
        Statement statement = con.createStatement();
        Statement statement2 = con.createStatement();
        String query = "SELECT tarea FROM tareas_usuario WHERE usuario='" + id + "';";
        ResultSet resultado = null;
        ResultSet resultado2 = null;
        ArrayList<Tarea> tareas = new ArrayList<>();
        Tarea tareaActual = null;
        try {
            resultado = statement.executeQuery(query);
        } catch (SQLException e) {
            System.out.println(e.getMessage());
            return null;
        }

        while (resultado.next()) {
            try {
                resultado2 = statement2.executeQuery("SELECT * FROM tareas WHERE id='" + resultado.getString("tarea") + "';");
            } catch (SQLException e) {
                System.out.println(e.getMessage());
                return null;
            }
            while (resultado2.next()) {
                tareaActual = new Tarea();
                tareaActual.setNome(resultado2.getString("nombre"));
                tareaActual.setFechaInicio(resultado2.getDate("fechaInicio"));
                tareaActual.setFechaFin(resultado2.getDate("fechaFin"));
            }
            tareas.add(tareaActual);
        }

        return tareas;
    }

    protected static ArrayList<Tarea> obtenerTareasFinalizadasUsuarioBD(String id) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException {
        Connection con = obtenerConexionBD();
        Statement statement = con.createStatement();
        Statement statement2 = con.createStatement();
        String query = "SELECT tarea FROM tareas_usuario WHERE usuario='" + id + "';";
        ResultSet resultado = null;
        ResultSet resultado2 = null;
        ArrayList<Tarea> tareas = new ArrayList<>();
        Tarea tareaActual = null;
        try {
            resultado = statement.executeQuery(query);
        } catch (SQLException e) {
            System.out.println(e.getMessage());
            return null;
        }

        while (resultado.next()) {
            try {
                resultado2 = statement2.executeQuery("SELECT * FROM tareas WHERE id='" + resultado.getString("tarea") + "' AND finalizada=0;");
            } catch (SQLException e) {
                System.out.println(e.getMessage());
                return null;
            }
            while (resultado2.next()) {
                tareaActual = new Tarea();
                tareaActual.setNome(resultado2.getString("nombre"));
                tareaActual.setFechaInicio(resultado2.getDate("fechaInicio"));
                tareaActual.setFechaFin(resultado2.getDate("fechaFin"));
            }
            tareas.add(tareaActual);
        }

        return tareas;
    }

    public static void cargarDatosUsuarioBD(Usuario usuario) throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException {
        usuario.setID("jose12");
        usuario.setNombre(ConexionBD.obtenerNombreUsuario(usuario.getID()));
        usuario.setProyectos(ConexionBD.obtenerProyectosUsuario(usuario.getID()));
        usuario.setTareas(ConexionBD.obtenerTareasUsuarioBD(usuario.getID()));
        usuario.setTareasFinalizadas(ConexionBD.obtenerTareasFinalizadasUsuarioBD(usuario.getID()));
    }

}
